package com.beauty.product.service;

import com.beauty.product.dto.PageResponse;
import com.beauty.product.dto.ProductAttributeDto;
import com.beauty.product.dto.ProductDto;
import com.beauty.product.dto.ProductImageDto;
import com.beauty.product.dto.ProductQueryParam;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

public interface ProductService {
    
    ProductDto createProduct(ProductDto productDto);
    
    ProductDto getProductById(String id);
    
    ProductDto getProductBySku(String sku);
    
    Page<ProductDto> getProducts(ProductQueryParam param);
    
    Page<ProductDto> getProductsByCategory(Long categoryId, int pageNum, int pageSize);
    
    List<ProductDto> getHotProducts(int limit);
    
    List<ProductDto> getNewProducts(int limit);
    
    List<ProductDto> getRecommendedProducts(int limit);
    
    ProductDto updateProduct(String id, ProductDto productDto);
    
    void deleteProduct(String id);
    
    void publishProduct(String id, Boolean isPublished);
    
    ProductImageDto addProductImage(String productId, ProductImageDto imageDto);
    
    List<ProductImageDto> getProductImages(String productId);
    
    void deleteProductImage(Long imageId);
    
    ProductAttributeDto addProductAttribute(String productId, ProductAttributeDto attributeDto);
    
    List<ProductAttributeDto> getProductAttributes(String productId);
    
    void deleteProductAttribute(Long attributeId);
    
    PageResponse<ProductDto> searchProducts(String keyword, Pageable pageable);
    
    PageResponse<ProductDto> advancedSearch(String name, String sku, String brand, String description, Pageable pageable);
    
    PageResponse<ProductDto> getProductsPage(Pageable pageable);
    
    ProductImageDto getProductImage(Long imageId);
    
    ProductImageDto updateProductImage(ProductImageDto imageDto);
} 